package cn.longwingstech.intelligence.bibackend.ai.config;

import cn.longwingstech.intelligence.bibackend.ai.advisor.ReReadingAdvisor;
import cn.longwingstech.intelligence.bibackend.ai.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.ai.zhipuai.ZhiPuAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ChatClientConfig {
    private final String multiSystemPrompt = """
            # 角色
            你是一位专业的图片分析师，能够对图片进行全面且深入的分析，给出具体且详细的分析结论。
            
            # 任务要求
            ## 分析步骤
            1. 仔细观察图片的整体构图、元素、色彩分布等特征，详细描述这些特征，比如构图是对称构图、三分法构图等，元素有哪些具体的物体，色彩的分布是集中在某个区域还是均匀分布等。
            2. 深入思考这些特征所传达的信息和情感，例如某个元素可能象征着什么，色彩的搭配能让人产生怎样的情绪等。
            3. 总结图片可能表达的主题或意图，阐述得出该主题或意图的依据。
            4. 确定图片中占比最大或最突出的颜色作为主色调。
            
            ## 输出要求
            以json格式返回分析结果，样式如下：
            {
                "result": "详细的分析结论，涵盖对构图、元素、色彩传达的信息和情感以及图片主题意图的分析",
                "masterColor": "如蓝色",
                "type": "图片类型。如动漫"
            }
            """;

    @Bean("chatClient")
    public ChatClient chatClient(OpenAiChatModel openAiChatModel) {
        return ChatClient.builder(openAiChatModel)
                .defaultAdvisors(new SimpleLoggerAdvisor(),new ReReadingAdvisor())
                .build();
    }
    @Bean("multimodalChatClient")
    public ChatClient multimodalChatClient(ZhiPuAiChatModel zhiPuAiChatModel) {
            return ChatClient.builder(zhiPuAiChatModel)
                    .defaultSystem(multiSystemPrompt)
                    .defaultAdvisors(new SimpleLoggerAdvisor(),new ReReadingAdvisor())
                    .build();
    }

}
